#include<bits/stdc++.h>
using namespace std;
struct car{
    int d,v,a;
}c[100005];
int p[100005];
//bool cmp1(int x,int y){return x>y;}
//bool cmp2(car x,car y){return x.d>y.d;}
int main(){
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    int T;
    cin>>T;
    for(int i=1;i<=T;i++){
        int n,m,L,V;
        bool f=0;
        cin>>n>>m>>L>>V;
        for(int j=1;j<=n;j++){
            cin>>c[j].d>>c[j].v>>c[j].a;
            if(c[j].a!=0)f=1;
        }
        for(int j=1;j<=m;j++)cin>>p[j];
        sort(p+1,p+m+1);
        if(!f){
            int ans=0;
            for(int j=1;j<=n;j++){
                if(c[j].v<=V)ans++;
            }
            cout<<n-ans<<endl<<m-1<<endl;
        }
        else{
            int ans=0,mi=INT_MAX;
            for(int j=1;j<=n;j++){
                if(c[j].v<=V&&c[j].a<=0)continue;
                if(c[j].v>=V&&c[j].a>=0){
                    ans++;
                    continue;
                }
                for(int l=1;l<=m;l++){
                    if(p[l]>=c[j].d){
                        int dis=p[l]-c[j].d;
                        if(sqrt(c[j].v*c[j].v+2*c[j].a*dis)>V){
                            ans++;
                            mi=min(mi,l);
                            break;
                        }
                    }
                }
            }
            cout<<ans<<endl<<m-mi<<endl;
        }
    }
    return 0;
}